Calendar All Tests
Current file: /home/estudydev/workspace/eStudy_svn/web/roleplay/classes/class.userrolemanagement.inc.php
Legend: executed not executed dead code

  Coverage
  Classes Methods Lines
Total
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 12
0.00 %0.00%
0.00% 0 / 225
 
UserRoleManagement
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 12
0.00 %0.00%
0.00% 0 / 225
 public function UserRoleManagement($courseID)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 2
 public function showRoleAssignmentForms()
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 16
 public function getUsersWithRole($roleID)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 9
 public function assignUsersToRole($roleID, $users)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 38
 public function setRoleForUser($userID, $roleID, $setActive = false)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 17
 public function unsetRoleForUser($userID, $roleID)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 24
 public function getRolesOfUser($userID, $onlyActive = false)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 17
 public function showUserRoleForm($userID)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 28
 public function setActiveUserRole($userID, $roleID)
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 15
 public function showUsersOverview()
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 22
 public function showRolesOverview()
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 24
 public function readUsersAndRoleSets()
0.00 %0.00%
0.00% 0 / 1
0.00 %0.00%
0.00% 0 / 13


       1                 : <?php                                                                                                                                                                                                                                                                                                                                   
       2                 : /*--------------------------------------------------------------------------+                                                                                                                                                                                                                                                           
       3                 : This file is part of eStudy.                                                                                                                                                                                                                                                                                                            
       4                 : roleplay/classes/class.userrolemanagement.inc.php                                                                                                                                                                                                                                                                                       
       5                 : - Modulgruppe:  Roleplay                                                                                                                                                                                                                                                                                                                
       6                 : - Beschreibung: Klasse zum Verwalten der Rollenzuordnungen der Teilnehmer.                                                                                                                                                                                                                                                              
       7                 : - Version:      0.8, 02/12/06                                                                                                                                                                                                                                                                                                           
       8                 : - Autor(en):    Clemens Weiß <clemens.weiss@mni.fh-giessen.de>                                                                                                                                                                                                                                                                         
       9                 : +---------------------------------------------------------------------------+                                                                                                                                                                                                                                                           
      10                 : This program is free software; you can redistribute it and/or                                                                                                                                                                                                                                                                           
      11                 : modify it under the terms of the GNU General Public License                                                                                                                                                                                                                                                                             
      12                 : as published by the Free Software Foundation; either version 2                                                                                                                                                                                                                                                                          
      13                 : of the License, or any later version.                                                                                                                                                                                                                                                                                                   
      14                 : +---------------------------------------------------------------------------+                                                                                                                                                                                                                                                           
      15                 : This program is distributed in the hope that it will be useful,                                                                                                                                                                                                                                                                         
      16                 : but WITHOUT ANY WARRANTY; without even the implied warranty of                                                                                                                                                                                                                                                                          
      17                 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                                                                                                                                                                                                                                                           
      18                 : GNU General Public License for more details.                                                                                                                                                                                                                                                                                            
      19                 : You should have received a copy of the GNU General Public License                                                                                                                                                                                                                                                                       
      20                 : along with this program; if not, write to the Free Software                                                                                                                                                                                                                                                                             
      21                 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                                                                                                                                                                                                                                                             
      22                 : +--------------------------------------------------------------------------*/                                                                                                                                                                                                                                                           
      23                 : /**                                                                                                                                                                                                                                                                                                                                     
      24                 :  * Klasse zum Verwalten der Rollenzuordnungen der Teilnehmer.                                                                                                                                                                                                                                                                           
      25                 :  * @package eStudy.Roleplay                                                                                                                                                                                                                                                                                                             
      26                 :  * @version 0.8, 02/12/06                                                                                                                                                                                                                                                                                                               
      27                 :  * @author Clemens Weiß <clemens.weiss@mni.fh-giessen.de>                                                                                                                                                                                                                                                                              
      28                 :  */                                                                                                                                                                                                                                                                                                                                     
      29                 : require_once (PATH_TO_ROOT."roleplay/classes/class.rolesetlist.inc.php");                                                                                                                                                                                                                                                               
      30                 : require_once (PATH_TO_ROOT."roleplay/classes/class.role.inc.php");                                                                                                                                                                                                                                                                      
      31                 : require_once (PATH_TO_ROOT."courses/classes/class.Course.inc.php");                                                                                                                                                                                                                                                                     
      32                 : require_once (PATH_TO_ROOT."teams/classes/class.userteammanagement.inc.php");                                                                                                                                                                                                                                                           
      33                 : class UserRoleManagement {                                                                                                                                                                                                                                                                                                              
      34                 :     /**                                                                                                                                                                                                                                                                                                                                 
      35                 :      * Enthält ein Array der in dem Kurs aktiven Rollen-Sets.                                                                                                                                                                                                                                                                          
      36                 :      * @var array                                                                                                                                                                                                                                                                                                                       
      37                 :      * @access private                                                                                                                                                                                                                                                                                                                  
      38                 :      */                                                                                                                                                                                                                                                                                                                                 
      39                 :     var $roleSets;                                                                                                                                                                                                                                                                                                                      
      40                 :     /**                                                                                                                                                                                                                                                                                                                                 
      41                 :      * ID des Kurses, für den die Benutzer-Rollen verwaltet werden sollen                                                                                                                                                                                                                                                              
      42                 :      * @var int                                                                                                                                                                                                                                                                                                                         
      43                 :      * @access private                                                                                                                                                                                                                                                                                                                  
      44                 :      */                                                                                                                                                                                                                                                                                                                                 
      45                 :     var $courseID;                                                                                                                                                                                                                                                                                                                      
      46                 :     /**                                                                                                                                                                                                                                                                                                                                 
      47                 :      * Array mit den Vor- und Nachnamen aller Kurs-Mitglieder                                                                                                                                                                                                                                                                           
      48                 :      * @var array                                                                                                                                                                                                                                                                                                                       
      49                 :      * @access private                                                                                                                                                                                                                                                                                                                  
      50                 :      */                                                                                                                                                                                                                                                                                                                                 
      51                 :     var $users;                                                                                                                                                                                                                                                                                                                         
      52                 :     /**                                                                                                                                                                                                                                                                                                                                 
      53                 :      * Konstruktor.                                                                                                                                                                                                                                                                                                                     
      54                 :      * @access public                                                                                                                                                                                                                                                                                                                   
      55                 :      * @param int $courseID ID des Kurses, für den die Benutzer-Rollen verwaltet werden sollen                                                                                                                                                                                                                                         
      56                 :      */                                                                                                                                                                                                                                                                                                                                 
      57                 :     function UserRoleManagement($courseID) {                                                                                                                                                                                                                                                                                            
      58               0 :         $this->courseID = (int)$courseID;                                                                                                                                                                                                                                                                                               
      59               0 :     }                                                                                                                                                                                                                                                                                                                                   
      60                 :     /**                                                                                                                                                                                                                                                                                                                                 
      61                 :      * Gibt für jede Rolle aller in diesem Kurs aktiven Rollen-Sets eine select-Box aus, in der                                                                                                                                                                                                                                        
      62                 :      * aus allen Kurs-Mitgliedern ausgewählt werden kann, wer der Rolle zugeordnet ist.                                                                                                                                                                                                                                                
      63                 :      *                                                                                                                                                                                                                                                                                                                                  
      64                 :      * @access public                                                                                                                                                                                                                                                                                                                   
      65                 :      * @return void                                                                                                                                                                                                                                                                                                                     
      66                 :      */                                                                                                                                                                                                                                                                                                                                 
      67                 :     function showRoleAssignmentForms() {                                                                                                                                                                                                                                                                                                
      68               0 :         $this->readUsersAndRoleSets();                                                                                                                                                                                                                                                                                                  
      69               0 :         $size = count($this->users);                                                                                                                                                                                                                                                                                                    
      70               0 :         if ($size > 8) $size = 8;                                                                                                                                                                                                                                                                                                       
      71               0 :         $setName = "";                                                                                                                                                                                                                                                                                                                  
      72               0 :         foreach($this->roleSets as $roleSet) {                                                                                                                                                                                                                                                                                          
      73               0 :             if (count($this->roleSets) > 1) $setName = Data::toHTML($roleSet->getName() .": ", false);                                                                                                                                                                                                                                  
      74               0 :             foreach($roleSet->roles as $role) {                                                                                                                                                                                                                                                                                         
      75               0 :                 $userIDs = $this->getUsersWithRole($role->getID());                                                                                                                                                                                                                                                                     
      76               0 :                 echo "<form action='".PATH_TO_ROOT.SCRIPT_NAME."' method='post' class='roleAssignmentForm'><p>\n"."<input type='hidden' name='roleID' value='".$role->getID() ."' />\n"."<strong>$setName".$role->getPropertiesLink() ."</strong><br />\n"."<select name='users[]' size='$size' multiple='multiple'>\n";                
      77               0 :                 foreach($this->users as $userID => $userName) {                                                                                                                                                                                                                                                                         
      78               0 :                     echo "<option value='$userID'".(in_array($userID, $userIDs) ? " selected='selected'" : "") .">".Data::toHTML($userName, false) ."</option>\n";                                                                                                                                                                      
      79               0 :                 }                                                                                                                                                                                                                                                                                                                       
      80               0 :                 echo "</select><br />"."<input type='submit' name='okButton' value='Speichern' /> "."<input type='reset' value='Auswahl zur&uuml;cksetzen' />"."</p></form>\n";                                                                                                                                                         
      81               0 :             }                                                                                                                                                                                                                                                                                                                           
      82               0 :         }                                                                                                                                                                                                                                                                                                                               
      83               0 :     }                                                                                                                                                                                                                                                                                                                                   
      84                 :     /**                                                                                                                                                                                                                                                                                                                                 
      85                 :      * Gibt die IDs der Benutzer zurück, die die übergebene Rolle innehaben.                                                                                                                                                                                                                                                          
      86                 :      * Ob der Benutzer gerade in dieser Rolle aktiv ist, wird hier nicht überprüft.                                                                                                                                                                                                                                                   
      87                 :      *                                                                                                                                                                                                                                                                                                                                  
      88                 :      * @access public                                                                                                                                                                                                                                                                                                                   
      89                 :      * @param int $roleID ID der Rolle, für die die Benutzer zurückgegeben werden sollen                                                                                                                                                                                                                                              
      90                 :      * @return mixed Array mit den Benutzer-IDs (int) oder false, falls die Rollen-ID ungültig ist                                                                                                                                                                                                                                     
      91                 :      */                                                                                                                                                                                                                                                                                                                                 
      92                 :     function getUsersWithRole($roleID) {                                                                                                                                                                                                                                                                                                
      93               0 :         global $db, $settings;                                                                                                                                                                                                                                                                                                          
      94               0 :         $dbp = $settings["dbPrefix"];                                                                                                                                                                                                                                                                                                   
      95               0 :         if (!is_integer($roleID) || $roleID <= 0) {                                                                                                                                                                                                                                                                                     
      96               0 :             return false;                                                                                                                                                                                                                                                                                                               
      97                 :         }                                                                                                                                                                                                                                                                                                                               
      98               0 :         $userIDs = $db->get_col("SELECT user_id FROM {$dbp}user_roles JOIN {$dbp}user ON user_id=ID WHERE role_id='$roleID' ORDER BY Nachname, Vorname");                                                                                                                                                                               
      99               0 :         if (is_array($userIDs)) {                                                                                                                                                                                                                                                                                                       
     100               0 :             $userIDs = array_map("intval", $userIDs);                                                                                                                                                                                                                                                                                   
     101               0 :             return $userIDs;                                                                                                                                                                                                                                                                                                            
     102                 :         } else {                                                                                                                                                                                                                                                                                                                        
     103               0 :             return array();                                                                                                                                                                                                                                                                                                             
     104                 :         }                                                                                                                                                                                                                                                                                                                               
     105                 :     }                                                                                                                                                                                                                                                                                                                                   
     106                 :     /**                                                                                                                                                                                                                                                                                                                                 
     107                 :      * Ordnet alle im Array angegebenen Benutzer-IDs der angegebenen Rolle zu.                                                                                                                                                                                                                                                          
     108                 :      * Bestehende Zuordnungen von Benutzern, die nicht im Array enthalten sind,                                                                                                                                                                                                                                                         
     109                 :      * werden gelöscht.                                                                                                                                                                                                                                                                                                                
     110                 :      *                                                                                                                                                                                                                                                                                                                                  
     111                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     112                 :      * @param int $roleID ID der Rolle, zu der die Benutzer zugeordnet werden sollen                                                                                                                                                                                                                                                    
     113                 :      * @param array $users Array von Benutzer-IDs, die der Rolle zugeordnet werden sollen                                                                                                                                                                                                                                               
     114                 :      * @return boolean Erfolgswert                                                                                                                                                                                                                                                                                                      
     115                 :      */                                                                                                                                                                                                                                                                                                                                 
     116                 :     function assignUsersToRole($roleID, $users) {                                                                                                                                                                                                                                                                                       
     117               0 :         $this->readUsersAndRoleSets();                                                                                                                                                                                                                                                                                                  
     118               0 :         global $db, $settings, $EZSQL_ERROR;                                                                                                                                                                                                                                                                                            
     119               0 :         $dbp = $settings["dbPrefix"];                                                                                                                                                                                                                                                                                                   
     120               0 :         if (!is_integer($roleID) || $roleID <= 0 || !is_array($users)) {                                                                                                                                                                                                                                                                
     121               0 :             return false;                                                                                                                                                                                                                                                                                                               
     122                 :         }                                                                                                                                                                                                                                                                                                                               
     123               0 :         $roleInSet = false;                                                                                                                                                                                                                                                                                                             
     124               0 :         foreach($this->roleSets as $roleSet) {                                                                                                                                                                                                                                                                                          
     125               0 :             foreach($roleSet->roles as $role) {                                                                                                                                                                                                                                                                                         
     126               0 :                 if ($roleID == $role->getID()) {                                                                                                                                                                                                                                                                                        
     127               0 :                     $roleInSet = true;                                                                                                                                                                                                                                                                                                  
     128               0 :                     break;                                                                                                                                                                                                                                                                                                              
     129                 :                 }                                                                                                                                                                                                                                                                                                                       
     130               0 :             }                                                                                                                                                                                                                                                                                                                           
     131               0 :             if ($roleInSet) break;                                                                                                                                                                                                                                                                                                      
     132               0 :         }                                                                                                                                                                                                                                                                                                                               
     133               0 :         if (!$roleInSet) {                                                                                                                                                                                                                                                                                                              
     134                 :             // Rolle gehört zu keinem hier aktiven Set                                                                                                                                                                                                                                                                                 
     135               0 :             return false;                                                                                                                                                                                                                                                                                                               
     136                 :         }                                                                                                                                                                                                                                                                                                                               
     137               0 :         $users = array_map("intval", $users);                                                                                                                                                                                                                                                                                           
     138               0 :         if (count(array_diff($users, array_keys($this->users)))) {                                                                                                                                                                                                                                                                      
     139                 :             // einer der Benutzer ist nicht Mitglied dieses Kurses                                                                                                                                                                                                                                                                      
     140               0 :             return false;                                                                                                                                                                                                                                                                                                               
     141                 :         }                                                                                                                                                                                                                                                                                                                               
     142               0 :         $oldUsers = $this->getUsersWithRole($roleID);                                                                                                                                                                                                                                                                                   
     143               0 :         $insert = array_diff($users, $oldUsers);                                                                                                                                                                                                                                                                                        
     144               0 :         $delete = array_diff($oldUsers, $users);                                                                                                                                                                                                                                                                                        
     145               0 :         $errorCount = count($EZSQL_ERROR);                                                                                                                                                                                                                                                                                              
     146               0 :         if (count($insert)) {                                                                                                                                                                                                                                                                                                           
     147               0 :             $db->query("INSERT INTO {$dbp}user_roles (user_id, role_id) VALUES ('".implode("', '$roleID'), ('", $insert) ."', '$roleID')");                                                                                                                                                                                             
     148               0 :         }                                                                                                                                                                                                                                                                                                                               
     149               0 :         if (count($delete)) {                                                                                                                                                                                                                                                                                                           
     150               0 :             $db->query("DELETE FROM {$dbp}user_roles WHERE user_id IN (".implode(", ", $delete) .") AND role_id='$roleID'");                                                                                                                                                                                                            
     151               0 :         }                                                                                                                                                                                                                                                                                                                               
     152               0 :         if (RoleSetList::roleplayForced($this->courseID)) {                                                                                                                                                                                                                                                                             
     153               0 :             foreach($insert as $userID) {                                                                                                                                                                                                                                                                                               
     154               0 :                 if ($this->getRolesOfUser($userID, true) == array()) {                                                                                                                                                                                                                                                                  
     155               0 :                     $this->setActiveUserRole($userID, $roleID);                                                                                                                                                                                                                                                                         
     156               0 :                 }                                                                                                                                                                                                                                                                                                                       
     157               0 :             }                                                                                                                                                                                                                                                                                                                           
     158               0 :         }                                                                                                                                                                                                                                                                                                                               
     159               0 :         if (count($EZSQL_ERROR) > $errorCount) return false;                                                                                                                                                                                                                                                                            
     160               0 :         return true;                                                                                                                                                                                                                                                                                                                    
     161                 :     }                                                                                                                                                                                                                                                                                                                                   
     162                 :     /**                                                                                                                                                                                                                                                                                                                                 
     163                 :      * Ordnet eine Rolle einem User zu.                                                                                                                                                                                                                                                                                                 
     164                 :      *                                                                                                                                                                                                                                                                                                                                  
     165                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     166                 :      * @param int $userID User-ID                                                                                                                                                                                                                                                                                                       
     167                 :      * @param int $roleID Rollen-ID                                                                                                                                                                                                                                                                                                     
     168                 :      * @param bool $setActive Gibt an, ob die neue Rolle auch aktiv gesetzt werden soll.                                                                                                                                                                                                                                                
     169                 :      * @return bool Erfolgswert                                                                                                                                                                                                                                                                                                         
     170                 :      */                                                                                                                                                                                                                                                                                                                                 
     171                 :     function setRoleForUser($userID, $roleID, $setActive = false) {                                                                                                                                                                                                                                                                     
     172               0 :         global $db, $settings, $EZSQL_ERROR;                                                                                                                                                                                                                                                                                            
     173               0 :         $dbp = $settings["dbPrefix"];                                                                                                                                                                                                                                                                                                   
     174               0 :         if (!is_integer($userID) || $userID <= 0 || !is_integer($roleID) || $roleID <= 0) {                                                                                                                                                                                                                                             
     175               0 :             return false;                                                                                                                                                                                                                                                                                                               
     176                 :         }                                                                                                                                                                                                                                                                                                                               
     177               0 :         $result = true;                                                                                                                                                                                                                                                                                                                 
     178               0 :         $userIDs = $this->getUsersWithRole($roleID);                                                                                                                                                                                                                                                                                    
     179               0 :         if ($userIDs === false) {                                                                                                                                                                                                                                                                                                       
     180               0 :             return false;                                                                                                                                                                                                                                                                                                               
     181                 :         }                                                                                                                                                                                                                                                                                                                               
     182               0 :         if (!in_array($userID, $userIDs)) {                                                                                                                                                                                                                                                                                             
     183               0 :             $errorCount = count($EZSQL_ERROR);                                                                                                                                                                                                                                                                                          
     184               0 :             $db->query("INSERT INTO {$dbp}user_roles (user_id, role_id) VALUES ('$userID', '$roleID')");                                                                                                                                                                                                                                
     185               0 :             $result = $errorCount == count($EZSQL_ERROR);                                                                                                                                                                                                                                                                               
     186               0 :         }                                                                                                                                                                                                                                                                                                                               
     187               0 :         if ($result && $setActive) {                                                                                                                                                                                                                                                                                                    
     188               0 :             $result = $this->setActiveUserRole($userID, $roleID);                                                                                                                                                                                                                                                                       
     189               0 :         }                                                                                                                                                                                                                                                                                                                               
     190               0 :         return $result;                                                                                                                                                                                                                                                                                                                 
     191                 :     }                                                                                                                                                                                                                                                                                                                                   
     192                 :     /**                                                                                                                                                                                                                                                                                                                                 
     193                 :      * Entfernt die Rollenzuordnung eines Users.                                                                                                                                                                                                                                                                                        
     194                 :      *                                                                                                                                                                                                                                                                                                                                  
     195                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     196                 :      * @param int $userID User-ID                                                                                                                                                                                                                                                                                                       
     197                 :      * @param int $roleID Rollen-ID                                                                                                                                                                                                                                                                                                     
     198                 :      * @return bool Erfolgswert                                                                                                                                                                                                                                                                                                         
     199                 :      */                                                                                                                                                                                                                                                                                                                                 
     200                 :     function unsetRoleForUser($userID, $roleID) {                                                                                                                                                                                                                                                                                       
     201               0 :         global $db, $settings, $EZSQL_ERROR;                                                                                                                                                                                                                                                                                            
     202               0 :         $dbp = $settings["dbPrefix"];                                                                                                                                                                                                                                                                                                   
     203               0 :         if (!is_integer($userID) || $userID <= 0 || !is_integer($roleID) || $roleID <= 0) {                                                                                                                                                                                                                                             
     204               0 :             return false;                                                                                                                                                                                                                                                                                                               
     205                 :         }                                                                                                                                                                                                                                                                                                                               
     206               0 :         $result = true;                                                                                                                                                                                                                                                                                                                 
     207               0 :         $errorCount = count($EZSQL_ERROR);                                                                                                                                                                                                                                                                                              
     208               0 :         $db->query("DELETE FROM {$dbp}user_roles WHERE user_id='$userID' AND role_id='$roleID'");                                                                                                                                                                                                                                       
     209               0 :         $result = $errorCount == count($EZSQL_ERROR);                                                                                                                                                                                                                                                                                   
     210               0 :         if ($result && RoleSetList::roleplayForced($this->courseID)) {                                                                                                                                                                                                                                                                  
     211               0 :             $roles = $this->getRolesOfUser($userID);                                                                                                                                                                                                                                                                                    
     212               0 :             if (!empty($roles)) {                                                                                                                                                                                                                                                                                                       
     213               0 :                 $active = false;                                                                                                                                                                                                                                                                                                        
     214               0 :                 foreach($roles as $role) {                                                                                                                                                                                                                                                                                              
     215               0 :                     if ($role["isActive"]) {                                                                                                                                                                                                                                                                                            
     216               0 :                         $active = true;                                                                                                                                                                                                                                                                                                 
     217               0 :                         break;                                                                                                                                                                                                                                                                                                          
     218                 :                     }                                                                                                                                                                                                                                                                                                                   
     219               0 :                 }                                                                                                                                                                                                                                                                                                                       
     220               0 :                 if (!$active) {                                                                                                                                                                                                                                                                                                         
     221               0 :                     $role = array_pop($roles);                                                                                                                                                                                                                                                                                          
     222               0 :                     $this->setActiveUserRole($userID, $role["role"]->getID());                                                                                                                                                                                                                                                          
     223               0 :                 }                                                                                                                                                                                                                                                                                                                       
     224               0 :             }                                                                                                                                                                                                                                                                                                                           
     225               0 :         }                                                                                                                                                                                                                                                                                                                               
     226               0 :         return $result;                                                                                                                                                                                                                                                                                                                 
     227                 :     }                                                                                                                                                                                                                                                                                                                                   
     228                 :     /**                                                                                                                                                                                                                                                                                                                                 
     229                 :      * Gibt die dem angegebenen Benutzer zugewiesenen Rollen in einem Array zurück.                                                                                                                                                                                                                                                    
     230                 :      *                                                                                                                                                                                                                                                                                                                                  
     231                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     232                 :      * @param int $userID ID des Benutzers, dessen Rollen zurückgegeben werden sollen                                                                                                                                                                                                                                                  
     233                 :      * @return mixed Zweidimensionales Array mit der Rollen-ID als Schlüssel und den Werten isActive und dem Rollenobjekt role                                                                                                                                                                                                         
     234                 :      *               oder false bei ungültiger User-ID                                                                                                                                                                                                                                                                                 
     235                 :      */                                                                                                                                                                                                                                                                                                                                 
     236                 :     function getRolesOfUser($userID, $onlyActive = false) {                                                                                                                                                                                                                                                                             
     237               0 :         global $db, $settings;                                                                                                                                                                                                                                                                                                          
     238               0 :         $dbp = $settings["dbPrefix"];                                                                                                                                                                                                                                                                                                   
     239               0 :         if (!is_integer($userID) || $userID <= 0) {                                                                                                                                                                                                                                                                                     
     240               0 :             return false;                                                                                                                                                                                                                                                                                                               
     241                 :         }                                                                                                                                                                                                                                                                                                                               
     242               0 :         $whereActive = "";                                                                                                                                                                                                                                                                                                              
     243               0 :         if ($onlyActive) {                                                                                                                                                                                                                                                                                                              
     244               0 :             $whereActive = "AND {$dbp}user_roles.is_active=1 ";                                                                                                                                                                                                                                                                         
     245               0 :         }                                                                                                                                                                                                                                                                                                                               
     246               0 :         $sql = "SELECT role_id, {$dbp}user_roles.is_active "."FROM {$dbp}user_roles JOIN {$dbp}roles ON {$dbp}roles.id=role_id JOIN {$dbp}rolesets ON {$dbp}rolesets.id=set_id "."WHERE user_id='$userID' AND {$dbp}rolesets.is_active=1 AND course_id='$this->courseID' $whereActive"."ORDER BY {$dbp}rolesets.name, {$dbp}roles.name";
     247               0 :         $roles = $db->get_results($sql);                                                                                                                                                                                                                                                                                                
     248               0 :         if ($db->num_rows) {                                                                                                                                                                                                                                                                                                            
     249               0 :             foreach($roles as $role) {                                                                                                                                                                                                                                                                                                  
     250               0 :                 $arr[(int)$role->role_id]["isActive"] = (bool)$role->is_active;                                                                                                                                                                                                                                                         
     251               0 :                 $arr[(int)$role->role_id]["role"] = new Role((int)$role->role_id);                                                                                                                                                                                                                                                      
     252               0 :             }                                                                                                                                                                                                                                                                                                                           
     253               0 :             return $arr;                                                                                                                                                                                                                                                                                                                
     254                 :         } else {                                                                                                                                                                                                                                                                                                                        
     255               0 :             return array();                                                                                                                                                                                                                                                                                                             
     256                 :         }                                                                                                                                                                                                                                                                                                                               
     257                 :     }                                                                                                                                                                                                                                                                                                                                   
     258                 :     /**                                                                                                                                                                                                                                                                                                                                 
     259                 :      * Zeigt das Formular an, mit dem der Benutzer eine der ihm zugewiesenen Rollen aktivieren kann.                                                                                                                                                                                                                                    
     260                 :      *                                                                                                                                                                                                                                                                                                                                  
     261                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     262                 :      * @param int $userID ID des Benutzers, dessen Rollen ausgegeben werden sollen                                                                                                                                                                                                                                                      
     263                 :      * @return void                                                                                                                                                                                                                                                                                                                     
     264                 :      */                                                                                                                                                                                                                                                                                                                                 
     265                 :     function showUserRoleForm($userID) {                                                                                                                                                                                                                                                                                                
     266               0 :         if (!is_integer($userID) || $userID <= 0) {                                                                                                                                                                                                                                                                                     
     267               0 :             return false;                                                                                                                                                                                                                                                                                                               
     268                 :         }                                                                                                                                                                                                                                                                                                                               
     269               0 :         $roles = $this->getRolesOfUser($userID);                                                                                                                                                                                                                                                                                        
     270               0 :         if (empty($roles)) {                                                                                                                                                                                                                                                                                                            
     271               0 :             echo "<p>Ihnen ist derzeit keine Rolle zugeordnet.</p>";                                                                                                                                                                                                                                                                    
     272               0 :         } else {                                                                                                                                                                                                                                                                                                                        
     273               0 :             $noActive = true;                                                                                                                                                                                                                                                                                                           
     274               0 :             $sets = 0;                                                                                                                                                                                                                                                                                                                  
     275               0 :             $lastSetName = "";                                                                                                                                                                                                                                                                                                          
     276               0 :             foreach($roles as $role) {                                                                                                                                                                                                                                                                                                  
     277               0 :                 if ($role["isActive"]) {                                                                                                                                                                                                                                                                                                
     278               0 :                     $noActive = false;                                                                                                                                                                                                                                                                                                  
     279               0 :                 }                                                                                                                                                                                                                                                                                                                       
     280               0 :                 if ($lastSetName != $role["role"]->getSetName()) $sets++;                                                                                                                                                                                                                                                               
     281               0 :                 $lastSetName = $role["role"]->getSetName();                                                                                                                                                                                                                                                                             
     282               0 :             }                                                                                                                                                                                                                                                                                                                           
     283               0 :             echo "<p>Ihnen sind derzeit folgende Rollen zugeordnet.<br />Bitte w&auml;hlen Sie aus, welche Sie bis zur n&auml;chsten &Auml;nderung in diesem Kurs einnehmen wollen:</p>\n";                                                                                                                                             
     284               0 :             echo "<form action='".PATH_TO_ROOT.SCRIPT_NAME."' method='post' id='userRoleForm'>\n"."<ul>\n";                                                                                                                                                                                                                             
     285               0 :             if (!RoleSetList::roleplayForced($this->courseID)) {                                                                                                                                                                                                                                                                        
     286               0 :                 echo "<li id='noRole'><input type='radio' name='roleID' id='role0' value='0' ".($noActive ? "checked='checked' " : "") ."/> <label for='role0'>keine</label></li>\n";                                                                                                                                                   
     287               0 :             }                                                                                                                                                                                                                                                                                                                           
     288               0 :             foreach($roles as $roleID => $role) {                                                                                                                                                                                                                                                                                       
     289               0 :                 $roleName = $role["role"]->getName($_SESSION["gender"]);                                                                                                                                                                                                                                                                
     290               0 :                 if ($sets > 1) $roleName = $role["role"]->getSetName() .": ".$roleName;                                                                                                                                                                                                                                                 
     291               0 :                 echo "<li><input type='radio' name='roleID' id='role$roleID' value='$roleID' ".($role["isActive"] ? "checked='checked' " : "") ."/> ".$role["role"]->getPropertiesLink($role["role"]->getIcon()) ." <label for='role$roleID'>".Data::toHTML($roleName, false) ."</label></li>\n";                                       
     292               0 :             }                                                                                                                                                                                                                                                                                                                           
     293               0 :             echo "</ul>\n"."<br /><input type='submit' name='okButton' value='Rolle &uuml;bernehmen' />\n"."</form>\n";                                                                                                                                                                                                                 
     294                 :         }                                                                                                                                                                                                                                                                                                                               
     295               0 :     }                                                                                                                                                                                                                                                                                                                                   
     296                 :     /**                                                                                                                                                                                                                                                                                                                                 
     297                 :      * Setzt die angegebene Rolle für den Benutzer aktiv, alle anderen inaktiv.                                                                                                                                                                                                                                                        
     298                 :      * Wird 0 als Rollen-ID übergeben, werden alle Rollen des Benutzers auf inaktiv gesetzt                                                                                                                                                                                                                                            
     299                 :      *                                                                                                                                                                                                                                                                                                                                  
     300                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     301                 :      * @param int $userID ID des Benutzers, dessen Rolle gesetzt werden soll                                                                                                                                                                                                                                                            
     302                 :      * @param int $roleID ID der Rolle, die für den Benutzer aktiv gesetzt werden soll                                                                                                                                                                                                                                                 
     303                 :      * @return bool Erfolgswert                                                                                                                                                                                                                                                                                                         
     304                 :      */                                                                                                                                                                                                                                                                                                                                 
     305                 :     function setActiveUserRole($userID, $roleID) {                                                                                                                                                                                                                                                                                      
     306               0 :         global $db, $settings, $EZSQL_ERROR;                                                                                                                                                                                                                                                                                            
     307               0 :         $dbp = $settings["dbPrefix"];                                                                                                                                                                                                                                                                                                   
     308               0 :         if (!is_integer($userID) || $userID <= 0 || !is_integer($roleID) || $roleID < 0) {                                                                                                                                                                                                                                              
     309               0 :             return false;                                                                                                                                                                                                                                                                                                               
     310                 :         }                                                                                                                                                                                                                                                                                                                               
     311               0 :         $roleIDs = array_keys($this->getRolesOfUser($userID));                                                                                                                                                                                                                                                                          
     312               0 :         if (!in_array($roleID, $roleIDs) && $roleID > 0 || RoleSetList::roleplayForced($this->courseID) && $roleID == 0) {                                                                                                                                                                                                              
     313               0 :             return false;                                                                                                                                                                                                                                                                                                               
     314                 :         }                                                                                                                                                                                                                                                                                                                               
     315               0 :         $errorCount = count($EZSQL_ERROR);                                                                                                                                                                                                                                                                                              
     316               0 :         $db->query("UPDATE {$dbp}user_roles SET is_active=0 WHERE user_id='$userID' AND role_id IN (".implode(", ", $roleIDs) .")");                                                                                                                                                                                                    
     317               0 :         if ($roleID > 0) {                                                                                                                                                                                                                                                                                                              
     318               0 :             $db->query("UPDATE {$dbp}user_roles SET is_active=1 WHERE user_id='$userID' AND role_id='$roleID'");                                                                                                                                                                                                                        
     319               0 :         }                                                                                                                                                                                                                                                                                                                               
     320               0 :         if (count($EZSQL_ERROR) > $errorCount) {                                                                                                                                                                                                                                                                                        
     321               0 :             return false;                                                                                                                                                                                                                                                                                                               
     322                 :         }                                                                                                                                                                                                                                                                                                                               
     323               0 :         return true;                                                                                                                                                                                                                                                                                                                    
     324                 :     }                                                                                                                                                                                                                                                                                                                                   
     325                 :     /**                                                                                                                                                                                                                                                                                                                                 
     326                 :      * Gibt eine Übersicht der Teilnehmer und den ihnen zugeordneten Rollen in Listenform aus.                                                                                                                                                                                                                                         
     327                 :      *                                                                                                                                                                                                                                                                                                                                  
     328                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     329                 :      * @return void                                                                                                                                                                                                                                                                                                                     
     330                 :      */                                                                                                                                                                                                                                                                                                                                 
     331                 :     function showUsersOverview() {                                                                                                                                                                                                                                                                                                      
     332               0 :         $utm = new UserTeamManagement($this->courseID);                                                                                                                                                                                                                                                                                 
     333               0 :         $this->readUsersAndRoleSets();                                                                                                                                                                                                                                                                                                  
     334               0 :         echo "<ul class='rolesOverview'>\n";                                                                                                                                                                                                                                                                                            
     335               0 :         foreach($this->users as $userID => $userName) {                                                                                                                                                                                                                                                                                 
     336               0 :             echo "<li><a href='".PATH_TO_ROOT."user/homepage.php?user=$userID'>".Data::toHTML($userName, false) ."</a>";                                                                                                                                                                                                                
     337               0 :             if ($team = $utm->getTeamOfUser((int)$userID)) {                                                                                                                                                                                                                                                                            
     338               0 :                 echo " (".Data::toHTML($team->getName(), false) .")";                                                                                                                                                                                                                                                                   
     339               0 :             }                                                                                                                                                                                                                                                                                                                           
     340               0 :             if ($roles = $this->getRolesOfUser($userID)) {                                                                                                                                                                                                                                                                              
     341               0 :                 echo "<ul>";                                                                                                                                                                                                                                                                                                            
     342               0 :                 foreach($roles as $role) {                                                                                                                                                                                                                                                                                              
     343               0 :                     echo "<li>".$role["role"]->getPropertiesLink();                                                                                                                                                                                                                                                                     
     344               0 :                     if (count($this->roleSets)) echo " (".Data::toHTML($role["role"]->getSetName(), false) .")";                                                                                                                                                                                                                        
     345               0 :                     if ($role["isActive"]) echo " (aktiv)";                                                                                                                                                                                                                                                                             
     346               0 :                     echo "</li>\n";                                                                                                                                                                                                                                                                                                     
     347               0 :                 }                                                                                                                                                                                                                                                                                                                       
     348               0 :                 echo "</ul>\n";                                                                                                                                                                                                                                                                                                         
     349               0 :             }                                                                                                                                                                                                                                                                                                                           
     350               0 :             echo "</li>\n";                                                                                                                                                                                                                                                                                                             
     351               0 :         }                                                                                                                                                                                                                                                                                                                               
     352               0 :         echo "</ul>\n";                                                                                                                                                                                                                                                                                                                 
     353               0 :     }                                                                                                                                                                                                                                                                                                                                   
     354                 :     /**                                                                                                                                                                                                                                                                                                                                 
     355                 :      * Gibt eine Übersicht der Rollen und den zugeordneten Teilnehmern in Listenform aus.                                                                                                                                                                                                                                              
     356                 :      *                                                                                                                                                                                                                                                                                                                                  
     357                 :      * @access public                                                                                                                                                                                                                                                                                                                   
     358                 :      * @return void                                                                                                                                                                                                                                                                                                                     
     359                 :      */                                                                                                                                                                                                                                                                                                                                 
     360                 :     function showRolesOverview() {                                                                                                                                                                                                                                                                                                      
     361               0 :         $utm = new UserTeamManagement($this->courseID);                                                                                                                                                                                                                                                                                 
     362               0 :         $this->readUsersAndRoleSets();                                                                                                                                                                                                                                                                                                  
     363               0 :         echo "<ul class='rolesOverview'>\n";                                                                                                                                                                                                                                                                                            
     364               0 :         $setName = "";                                                                                                                                                                                                                                                                                                                  
     365               0 :         foreach($this->roleSets as $roleSet) {                                                                                                                                                                                                                                                                                          
     366               0 :             if (count($this->roleSets) > 1) $setName = Data::toHTML($roleSet->getName() .": ", false);                                                                                                                                                                                                                                  
     367               0 :             foreach($roleSet->roles as $role) {                                                                                                                                                                                                                                                                                         
     368               0 :                 echo "<li>$setName".$role->getPropertiesLink();                                                                                                                                                                                                                                                                         
     369               0 :                 if ($userIDs = $this->getUsersWithRole($role->getID())) {                                                                                                                                                                                                                                                               
     370               0 :                     echo "<ul>";                                                                                                                                                                                                                                                                                                        
     371               0 :                     foreach($userIDs as $userID) {                                                                                                                                                                                                                                                                                      
     372               0 :                         echo "<li><a href='".PATH_TO_ROOT."user/homepage.php?user=$userID'>".Data::toHTML($this->users[$userID], false) ."</a>";                                                                                                                                                                                        
     373               0 :                         if ($team = $utm->getTeamOfUser((int)$userID)) {                                                                                                                                                                                                                                                                
     374               0 :                             echo " (".Data::toHTML($team->getName(), false) .")";                                                                                                                                                                                                                                                       
     375               0 :                         }                                                                                                                                                                                                                                                                                                               
     376               0 :                         echo "</li>\n";                                                                                                                                                                                                                                                                                                 
     377               0 :                     }                                                                                                                                                                                                                                                                                                                   
     378               0 :                     echo "</ul>\n";                                                                                                                                                                                                                                                                                                     
     379               0 :                 }                                                                                                                                                                                                                                                                                                                       
     380               0 :                 echo "</li>\n";                                                                                                                                                                                                                                                                                                         
     381               0 :             }                                                                                                                                                                                                                                                                                                                           
     382               0 :         }                                                                                                                                                                                                                                                                                                                               
     383               0 :         echo "</ul>";                                                                                                                                                                                                                                                                                                                   
     384               0 :     }                                                                                                                                                                                                                                                                                                                                   
     385                 :     /**                                                                                                                                                                                                                                                                                                                                 
     386                 :      * Bei Bedarf werden die Benutzer des Kurses und die aktiven Rollen-Sets ausgelesen.                                                                                                                                                                                                                                                
     387                 :      * Aus Performance-Gründen passiert das nicht im Konstruktor.                                                                                                                                                                                                                                                                      
     388                 :      *                                                                                                                                                                                                                                                                                                                                  
     389                 :      * @access private                                                                                                                                                                                                                                                                                                                  
     390                 :      * @return void                                                                                                                                                                                                                                                                                                                     
     391                 :      */                                                                                                                                                                                                                                                                                                                                 
     392                 :     function readUsersAndRoleSets() {                                                                                                                                                                                                                                                                                                   
     393               0 :         if (!isset($this->roleSets)) {                                                                                                                                                                                                                                                                                                  
     394               0 :             $this->roleSets = RoleSetList::getRoleSets($this->courseID, true);                                                                                                                                                                                                                                                          
     395               0 :         }                                                                                                                                                                                                                                                                                                                               
     396               0 :         if (!isset($this->users)) {                                                                                                                                                                                                                                                                                                     
     397               0 :             $this->users = array();                                                                                                                                                                                                                                                                                                     
     398               0 :             $users = Course::getParticipants($this->courseID, "all", "user.Nachname, user.Vorname");                                                                                                                                                                                                                                    
     399               0 :             if (is_array($users)) {                                                                                                                                                                                                                                                                                                     
     400               0 :                 foreach($users as $user) {                                                                                                                                                                                                                                                                                              
     401               0 :                     $this->users[$user->userid] = "$user->lastname, $user->firstname";                                                                                                                                                                                                                                                  
     402               0 :                 }                                                                                                                                                                                                                                                                                                                       
     403               0 :             }                                                                                                                                                                                                                                                                                                                           
     404               0 :         }                                                                                                                                                                                                                                                                                                                               
     405               0 :     }                                                                                                                                                                                                                                                                                                                                   
     406                 : }                                                                                                                                                                                                                                                                                                                                       

Generated by PHPUnit 3.2.21 and Xdebug 2.0.3 at Thu Nov 26 17:01:15 CET 2009.